package ca.clarity.hms.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 사용자 아이디와 비밀번호를 입력하고 로그인하는 activity class 이다.
 * <p/>
 * 1. 앱의 현재 버전 출력한다.
 * 2. 사용자 아이디, 비밀번호 입력받는다.
 * 3. 로그인 버튼을 터치하면 village 화면으로 이동한다.
 *
 * @author Junghun, Shin
 * @version 1.0
 */
public class HmsLoginActivity extends Activity {

    public static String TAG = HmsLoginActivity.class.getSimpleName();

    // 현재 버젼.
//    TextView currentVersionTextView;

    // 사용자 아이디.
//    EditText idEditText;

    // 사용자 비밀번호.
    EditText passwordEditText;

    // 로그인 버튼.
    Button loginButton;

    // 로그인을 한다.
    private static final int THREAD_LOGIN = 101;

    // 사용자 아이디가 없다는 dialog 를 띄운다.
//    private static final int THREAD_EMPTY_USER_ID = 102;

    // 사용자 비밀번호가 없다는 dialog 를 띄운다.
    private static final int THREAD_EMPTY_USER_PASSWORD = 103;

    // 로그인 실패 다이얼로그 창을 띄운다.
    private static final int THREAD_FAIL_LOGIN_DIALOG = 104;

    // 로그인 성공 토스트를 띄운다.
    private static final int THREAD_SUCCESS_LOGIN_TOAST = 105;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hms_login);

        String currentVersion = "";

        // 앱의 현재 버전을 가져 온다.
        try {

            PackageInfo i = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0);

            currentVersion = i.versionName;
            Log.i(TAG, "currentVersion : " + currentVersion);

        } catch (NameNotFoundException e) {

        }

        // 앱의 현재 버젼을 출력 한다.
//        currentVersionTextView = (TextView) findViewById(R.id.appVersion);
//        currentVersionTextView.setText(currentVersion);

        // 사용자 아이디.
//        idEditText = (EditText) findViewById(R.id.idEditText);

        // 사용자 비밀번호.
        passwordEditText = (EditText) findViewById(R.id.passwordEditText);

        // 로그인 버튼을 정의 한다.
        loginButton = (Button) findViewById(R.id.button_login);
        loginButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (("").equals(passwordEditText.getText().toString().trim())) {
                    // 사용자 비밀번호가 입력되지 않으면 dialog 를 띄워서 알려준다.
                    mHandler.sendMessage(mHandler.obtainMessage(THREAD_EMPTY_USER_PASSWORD));
                } else {
                    mHandler.sendMessage(mHandler.obtainMessage(THREAD_LOGIN));
                }
            }
        });


        // Header, Footer 생성 및 등록
        View header = getLayoutInflater().inflate(R.layout.activity_hms_header, null, false);
        View footer = getLayoutInflater().inflate(R.layout.activity_hms_footer, null, false);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    /**
     * Handler 를 정의한다.
     * 모든 Thread 를 등록해 놓고 필요할때 호출한다.
     */
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                // 로그인을 한다.
                case THREAD_LOGIN:
                    login();
                    break;
                case THREAD_EMPTY_USER_PASSWORD:
                    showDialogEmptyUserPassword();
                    break;
                case THREAD_FAIL_LOGIN_DIALOG:
                    showDialogFailToLogin();
                    break;
                case THREAD_SUCCESS_LOGIN_TOAST:
                    showToastSuccessToLogin();
                    break;
            }
        }
    };

    /**
     * 로그인 처리를 한다.
     */
    public void login() {
        Log.i(TAG, "login");

		/*
         * 여기에 로그인 로직 구현.
		 */

        String result = "SUCCESS";    // 일단은 테스트용..

        if (("SUCCESS").equals(result)) {
            mHandler.sendMessage(mHandler.obtainMessage(THREAD_SUCCESS_LOGIN_TOAST));

            // 로그인에 성공하면 village 화면을 출력 한다.
            Intent i = new Intent(HmsLoginActivity.this, HmsLandingActivity.class);
            startActivity(i);
            finish();
        } else {
            // 로그인 실패 dialog 창을 출력 한다.
            mHandler.sendMessage(mHandler.obtainMessage(THREAD_FAIL_LOGIN_DIALOG));
        }
    }

    /**
     * 입력된 사용자 아이디가 없다는 dialog 를 띄운다.
     */
    private void showDialogEmptyUserId() {
        new AlertDialog.Builder(HmsLoginActivity.this)
                .setTitle("User Login")
                .setMessage("Empty user id.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                })
                .setNegativeButton(android.R.string.no, null).show();
    }

    /**
     * 입력된 사용자 비밀번호가 없다는 dialog 를 띄운다.
     */
    private void showDialogEmptyUserPassword() {
        new AlertDialog.Builder(HmsLoginActivity.this)
                .setTitle("User Login")
                .setMessage("Empty user password.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                })
                .setNegativeButton(android.R.string.no, null).show();
    }

    /**
     * 로그인을 실패했다는 dialog 를 띄운다.
     */
    private void showDialogFailToLogin() {
        new AlertDialog.Builder(HmsLoginActivity.this)
                .setTitle("User Login")
                .setMessage("Fail to login. \nPlease try again.")
//		.setIcon(R.drawable.ic_launcher)	
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                })
                .setNegativeButton(android.R.string.no, null).show();
    }

    /**
     * 로그인에 성공했다는 toast 를 띄운다.
     */
    public void showToastSuccessToLogin() {
        CharSequence text = "Success to login.";
        Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);
        toast.show();
    }
}
